package main

import "fmt"

func main() {
	/*
		变量：variable
		概念：一小块内存，用于存储数据，在程序运行过程中数值可以改变

		使用：
			step1：变量的声明，也叫定义
				第一种：var 变量名 数据类型
						变量名 = 赋值

						var 变量名 数据类型 = 赋值

				第二种：类型推断，省略数据类型
						var 变量名 = 赋值

				第三种：简短定义，也叫简短声明，省略 var
						变量名 := 赋值

			step2：变量的访问，赋值和取值
					直接根据变量名访问
		特性：
			静态语言，支持运行时动态类型（动态主要是因为Cgo）
			强类型语言
			支持隐式类型推导
			支持垃圾自动回收
			。。。

        注意事项：
            1.函数外的每个语句都必须以关键字开始（var、const、func等）
            2.“:=” 不能使用在函数外
            3.“_” 多用于占位，表示忽略值


	*/
	//第一种：定义变量，然后进行赋值
	var num1 int
	num1 = 30
	fmt.Printf("num1的数值是：%d\n", num1)
	//写在一行
	var num2 int = 15
	fmt.Printf("num2的数值是：%d\n", num2)

	//第二种：类型推断
	var name = "Go语言"
	fmt.Printf("类型是：%T，数值是：%s\n", name, name) // %T 用来打印一个变量的数据类型

	//第三种：简短定义，也叫简短声明
	sum := 100
	fmt.Println(sum)

	//多个变量同时定义
	var a, b, c int
	a = 1
	b = 2
	c = 3
	fmt.Println(a, b, c)

	var m, n int = 100, 200
	fmt.Println(m, n)

	var x, y, z = 12, 23, "hhh"
	fmt.Println(x, y, z)

	p, q, w := 10, 20, "Go"
	fmt.Println(p, q, w)

	var (
		studentName = "喜羊羊"
		age         = 18
		category    = "羊"
	)
	fmt.Printf("学生姓名：%s,年龄：%d，物种：%s", studentName, age, category)
}
